20529
#include <iostream>
#include <vector>
using namespace std;
int MinMBTIDistance(vector<string> MBTI);
int CalcDistance(string a, string b);
int main()
{
int T;
cin >> T;
for(int i = 0; i < T; ++i)
{
int N;
cin >> N;
vector<string> MBTI;
MBTI.resize(N);
for(int j = 0; j < N; ++j)`
{
cin >> MBTI[j];
}
if(N <= 16 * 2)
{
// 브루트포스
cout << MinMBTIDistance(MBTI) << '\n';
}
else
{
cout << "0\n";
}
}
return 0;
}
int MinMBTIDistance(vector<string> MBTI)
{
int Size = MBTI.size();
int Result = INT32_MAX;
for(int i = 0; i < Size - 2; ++i)
{
for(int j = i + 1; j < Size - 1; ++j)
{
int BetweenIJ = CalcDistance(MBTI[i], MBTI[j]);
for(int k = j + 1; k < Size; ++k)
{
int Temp = BetweenIJ + CalcDistance(MBTI[i], MBTI[k]) + CalcDistance(MBTI[j], MBTI[k]);
Result = min(Result, Temp);
if(Result == 0)
{
goto LoopOut;
}
}
}
}
LoopOut:;
return Result;
}
int CalcDistance(string a, string b)
{
int Result = 0;
for(int i = 0; i < 4; ++i)
{
if(a[i] != b[i])
{
++Result;
}
}
return Result;
}
유형
비둘기집
브루트포스